package com.jiangyg.mall.admin.service;

import com.jiangyg.mall.admin.dto.DepartDTO;
import com.jiangyg.mall.admin.dto.DepartUserDTO;
import com.jiangyg.mall.admin.vo.DepartVO;
import com.jiangyg.mall.admin.vo.UserVO;
import com.jiangyg.mall.core.support.restful.Pagination;
import com.jiangyg.mall.core.utils.tree.Tree;

import java.util.List;

/**
 * 类描述：系统部门管理Service接口
 *
 * @author jiangyg
 * @version 2.0
 * @date 2020-07-30
 */
public interface DepartService {

    /**
     * 功能描述：部门树形结构
     *
     * @return 树形结构
     */
    List<Tree> departTree() throws Exception;

    /**
     * 功能描述：保存或者修改部门
     *
     * @param dto 部门信息
     * @return 返回是否操作成功 boolean
     */
    boolean saveOrUpdate(DepartDTO dto) throws Exception;

    /**
     * 功能描述：保存部门和用户关联关系
     *
     * @param dto     部门和用户关联关系
     * @return 结果
     */
    boolean saveRelation(DepartUserDTO dto);

    /**
     * 功能描述：删除部门和用户关联关系
     *
     * @param dto     部门和用户关联关系
     * @return 结果
     */
    boolean deleteRelation(DepartUserDTO dto);

    /**
     * 功能描述：根据ID获取部门信息
     *
     * @param departId 部门ID
     * @param details  详情标志，为 Y 的话，回显父级部门名称
     * @return 返回部门信息
     */
    DepartVO selectById(Long departId, String details) throws Exception;

    /**
     * 功能描述：删除部门
     *
     * @param departId 部门主键
     * @return 返回是否操作成功 boolean
     */
    boolean delete(Long departId);

    /**
     * 功能描述：查询部门下的用户列表
     *
     * @param pagination 分页信息
     * @param departId   部门ID
     * @return 用户列表
     */
    Pagination<UserVO> selectUserList(Pagination<UserVO> pagination, Long departId) throws Exception;

    /**
     * 功能描述：查询未分配部门的用户列表
     *
     * @return 用户列表
     */
    List<UserVO> selectUnallocatedUserList() throws Exception;

}
